בשיעור זה נלמד להשתמש בViews להעביר אליהם ומהם מידע
Views
למי שלא זוכר את מודל הMVC אני מציע לחזור לשיעור מספר 2, תפקידו של הview הוא בעצם להיות הפלט של התוכנית, הview יקבל את המשתנים שאותם אנחנו רוצים להציג, ויבנה מהם את הפלט.
נכון שבתוכניות ווב זה לרוב יהיה HTML, אך הVIEW משמש לכל סוג של פלט, לדוגמא XMLת או CSV או כל פלט טקטואלי אחר.
hello world with view
בשיעור הקודם בנינו תוכנית שבה הדפסנו hello world ושם עשיתי מעשה שלא יעשה והוצאתי פלט מתוך הקונטרולר עצמו, בואו נראה איך עושים זאת נכון:
Controller
צרו קונטרולר בשם hello.php תחת תיקיית applications/controllers, בקונטרולר יש פונקציית Index שטוענת את הview המתאים, אנחנו נרחיב בהמשך על הloader של הCI, אבל כאשר רוצים לטעון כל משאב כלשהו תחת CI משתמשים ב $this->load וכיוון שאנחנו רוצים לטעון view אנחנו משתמשים
ב$this->load->view()
<?php
class Hello extends CI_Controller{
function index() {
//load the view from application/views/hello/
$this->load->view("hello/index_view.php");
}
}
class Hello extends CI_Controller{
function index() {
//load the view from application/views/hello/
$this->load->view("hello/index_view.php");
}
}
View
את הview אנחנו שמים בתיקיית הapplication/views. כיוון שלתוכנית רגילה יש בין עשרות למאות views ואנחנו רוצים למיין אותם ושיהיה סדר, נהוג לייצר תת תיקייה עם שמו של הקונטרולר.
קרי: אם לקונטרולר שלנו קוראים hello אנחנו נייצר תיקייה בשם hello תחת views ורק תחתיה נשים את הviews שרלוונטים לcontroller הזה.
כדי לעשות את העניינים מסודרים עוד יותר נהוג לקרוא לview בשם המתודה שמפעילה אותו כיוון שבדוגמא להלן קוראים למתודה index אנחנו נקרא לview: בשם index_view.
כל זה למען הסדר הטוב בלבד, אתם יכולים לקרוא לview בכל שם ולשים אותו בכל מקום תחת תיקיית views אבל מנסיון מהר מאוד עוברים לתצורה הזאת כדי לשמור על סדר
אם כןת צרו את הקובץ הבא:
application/views/hello/index_view.php
<html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>this is my first view!</p>
</body>
</html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>this is my first view!</p>
</body>
</html>
וכדי להריץ את 2 הקבצים יחד שימו בURL את הכתובת הבאה:
http://localhost/CI/hello
או
http://localhost/CI/hello/index
או
http://localhost/CI/hello/index
ולמי שלא מבין ש-2 הכתובות לעייל הן אותו דבר אני ממליץ לחזור לשיעור שעבר...
אז אם הכל עובד כמו שצריך בשלב הזה אתם צריכים לקבל את הפלט של קובץ הHTML.
מזל טוב!!
passing parameters
אז בנינו את הVIEW הראשון שלנו, ועכשיו אנחנו רוצים להעביר אליו פרמטרים, העברת הפרמטרים לview נעשית גם כן דרך פונקציית הload.
כדי לעשות זאת צריך לבנות מערך שבו כל key יהיה שם של משתנה בview.
לדוגמא אם אנחנו רוצים להעביר לview את המשתנים $name ו$age אנחנו נייצר את המערך הבא:
$data['name'] = 'Alon';
$data['age'] = 120;
$data['age'] = 120;
וכדי להעביר את המידע לview נשתמש בפקודה $this->load->view([view name],[parameters array]) ובתור פרמטר שני נעביר את המערך.
לדוגמא:
<?php
class Hello extends CI_Controller{
function index() {
$data['name'] = 'Alon';
$data['age'] = 120;
//load the view from application/views/hello/
$this->load->view("hello/index_view.php",$data);
}
}
class Hello extends CI_Controller{
function index() {
$data['name'] = 'Alon';
$data['age'] = 120;
//load the view from application/views/hello/
$this->load->view("hello/index_view.php",$data);
}
}
ועתה בview אנחנו יכולים להשתמש במשתנים:
<html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>my name is <?php echo $name?> and my age is <?php echo $age?></p>
</body>
</html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>my name is <?php echo $name?> and my age is <?php echo $age?></p>
</body>
</html>
כדי להעביר לview מערך שלם פשוט צריך להכניס אותו כkey למערך ה$data לדוגמא:
<?php
class Hello extends CI_Controller{
function index() {
$data['name'] = 'Alon';
$data['age'] = 120;
$data['namesArr'] = array('Yair','Meni','Amichai','Alon');
//load the view from application/views/hello/
$this->load->view("hello/index_view.php",$data);
}
}
class Hello extends CI_Controller{
function index() {
$data['name'] = 'Alon';
$data['age'] = 120;
$data['namesArr'] = array('Yair','Meni','Amichai','Alon');
//load the view from application/views/hello/
$this->load->view("hello/index_view.php",$data);
}
}
ואז בview ניתן יהיה לגשת למערך ככל מערך רגיל:
<html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>my name is <?php echo $name?> and my age is <?php echo $age?></p>
<h2>names:</h2>
<ul>
<?php foreach ($namesArr as $name):?>
<li><?php echo $name?></li>
<?php endforeach;?>
</ul>
</body>
</html>
<head>
<title>view lesson 1</title>
</head>
<body>
<h1>hellow world!</h1>
<p>my name is <?php echo $name?> and my age is <?php echo $age?></p>
<h2>names:</h2>
<ul>
<?php foreach ($namesArr as $name):?>
<li><?php echo $name?></li>
<?php endforeach;?>
</ul>
</body>
</html>
טיפ אחרון לסיום
אם אתם רוצים למשוך את התוכן מהview במקום לשלוח אותו למשתמשת לדוגמא אם אתם רוצים לשלוח את הVIEW במייל במקום להציג למשתמשת ניתן להעביר פרמטר שלישי שיגרום לכך שהview יחזיר ערך במרום להישלח למשתמש.
$emailContent = $this->load->view("hello/index_view.php",$data,true);
עתה התוכן יוחזר אל $emailContent במקום להיות מוצג למשתמש וניתן יהיה לשלוח אותו במייל.
(ועל שליחת מיילים תחת CI מתישהו בהמשך)
לסיכום
ראינו איך טוענים view, איך העברת הפרמטרים לview נעשית דרך מערך אחד גדול שמרכז את כולם וראינו איך אנחנו יכולים להחזיר את הפלט מהview לשימושים אחרים.
תגובות לכתבה:
תודה. רק חבל שאתה כותב כל שבועיים מדריך ...
מוסבר טוב תודה !